Skip to main content

🧩 C Programlamada Dizi (Array) Başlatma Yöntemleri

Bu rehberde, C dilinde dizilerin (arrays) nasıl başlatıldığını farklı yöntemlerle öğreneceksiniz.
Hem klasik {} başlatma yöntemini, hem de GCC’ye özel aralık atama (designated initializer) sözdizimini örneklerle göreceğiz.
Ayrıca, her yöntemin avantajlarını ve dikkat edilmesi gereken hataları de açıklayacağız.


🎯 Bu Rehberde Ne Öğreneceksiniz

  • C’de dizilere ilk değer atamanın (initialize) temel yolları
  • {} başlatıcı listesiyle tam veya kısmi atama yapma
  • Tüm elemanları sıfıra eşitlemenin kısayolu
  • Çok boyutlu dizilerde başlatma mantığı
  • for döngüsüyle dinamik değer atama
  • GCC’ye özel Atanmış Başlatıcı (Designated Initializer) sözdizimi

1️⃣ Başlatıcı Listeler () Kullanarak Dizi Tanımlama

En yaygın yöntem, diziyi tanımlarken değerleri doğrudan süslü parantez içinde vermektir.

// Boyutu 5 olan dizinin elemanlarına sırasıyla değer atar.
int arr[5] = {1, 2, 3, 4, 5};

➡️ Bu kod, arr[0] = 1, arr[4] = 5 olacak şekilde diziyi doldurur.

A. Eksik Eleman Atama

Bazı elemanları boş bırakabilirsiniz, ancak kalanlar tanımsız (garbage) değer alır:


int arr[5] = {1, 2, 3}; // arr[3] ve arr[4] belirsiz

B. Boyut Belirtmeden Başlatma

Dizi boyutu, eleman sayısına göre otomatik hesaplanır:


int arr[] = {10, 20, 30, 40, 50};

💡 Boyut belirtilmemiş olsa da derleyici 5 eleman olduğunu anlar.

C. Tüm Elemanları Sıfıra Eşitleme

Tüm diziyi 0 yapmak için kısa bir kısayol:


#include <stdio.h>

int main() {
int arr[5] = {0}; // Tüm elemanlar otomatik olarak 0 olur.
for (int i=0; i<5; i++) printf("%d\n", arr[i]);
}

📤 Çıktı:


0
0
0
0
0

D. Çok Boyutlu Dizi Başlatma

C, dizileri bellekte satır satır (row-major) olarak saklar. Bu yüzden çok boyutlu diziler de tek blokla başlatılabilir:


int arr[3][3] = {1,2,3,4,5,6,7,8,9};

📤 Çıktı:

1
2
3
4
5
6
7
8
9

2️⃣ for Döngüsüyle Dinamik Dizi Başlatma

Bu yöntem, dinamik veya hesaplanan değerlerle dizi doldurmak için kullanılır.


#include <stdio.h>

int main() {
int arr[5];
for (int i=0; i<5; i++)
arr[i] = i * 2; // Her elemana dizin*2 değeri atanır.

for (int i=0; i<5; i++)
printf("%d\n", arr[i]);
}

📤 Çıktı:

0
2
4
6
8

💡 Döngüyle dizi başlatmak, kullanıcı girdisine veya hesaplama sonucuna göre değer atamak için idealdir.


3️⃣ Designated Initializers (Atanmış Başlatıcılar – GCC)

Bu yöntem yalnızca GCC/Clang derleyicilerinde desteklenir. Belirli dizin aralıklarına tek satırda aynı değeri atamayı sağlar.

A. Aralık Atama


#include <stdio.h>

int main() {
// 0’dan 8’e kadar tüm elemanlara 10 atanır.
int arr[9] = { [0 ... 8] = 10 };

for (int i=0; i<9; i++)
printf("%d\n", arr[i]);
}

📤 Çıktı:

10
10
10
10
10
10
10
10
10

B. Liste ve Aralık Atamasını Birleştirme

Bireysel atama ve aralık atamasını aynı anda kullanabilirsiniz:


#include <stdio.h>

int main() {
// arr[0]=0, arr[8]=0, [1...7] aralığı = 10
int arr[9] = { 0, [1 ... 7] = 10, 0 };

for (int i=0; i<9; i++)
printf("%d\n", arr[i]);
}

📤 Çıktı:

0
10
10
10
10
10
10
10
0

⚠️ Dikkat: Bu sözdizimi yalnızca GCC veya Clang gibi GNU tabanlı derleyicilerde çalışır. Visual Studio bu biçimi desteklemez.


⚖️ Dizi Başlatma Yöntemleri – Özet Tablo

YöntemAçıklamaAvantajDestek
Başlatıcı Liste {}Elemanları sıralı şekilde atarBasit ve hızlıTüm derleyiciler
0 ile BaşlatmaTüm elemanları 0 yaparKısa ve temizTüm derleyiciler
for DöngüsüDinamik, hesaplanabilir değerlerEsnekTüm derleyiciler
Designated InitializerAralık ataması yaparGelişmiş kullanımSadece GCC/Clang
Çok Boyutlu BaşlatmaSatır bazlı dizilerde kolaylık sağlarDüzenli yapıTüm derleyiciler

❓ Sıkça Sorulan Sorular (SSS)

1️⃣ Dizi başlatılmazsa ne olur?

Başlatılmayan diziler, bellekteki rastgele (garbage) değerleri içerir. Bu, hatalara neden olabilir.

2️⃣ 0 neden yalnızca sıfır için geçerli?

C standardına göre eksik elemanlar varsayılan olarak 0 kabul edilir. 0 ilk elemanı sıfırlar, kalanlar da otomatik 0 olur.

3️⃣ Designated initializer tüm derleyicilerde çalışır mı?

Hayır. [0 ... 8] aralık sözdizimi GCC ve Clang’a özgüdür. Visual Studio’da hata verir.

4️⃣ char dizileri nasıl başlatılır?


char s1[6] = {'H','E','L','L','O','\0'};
char s2[] = "HELLO"; // Otomatik '\0' eklenir

5️⃣ En güvenli yöntem hangisidir?

Statik dizilerde kullanmak en güvenlisidir. Dinamik değerlerde ise for döngüsü tercih edilir.


🚀 Sonuç

Artık C dilinde dizi başlatma yöntemlerinin tamamını biliyorsun:

klasik yöntem

0 sıfırlama

for döngüsüyle dinamik atama

GCC Designated Initializer ile aralık başlatma

Bu bilgileri kullanarak kodlarını daha temiz ve taşınabilir hale getirebilirsin.

💡 Geliştirdiğin C uygulamalarını Rabisu Bulut Platformu üzerinde test ederek gerçek sunucu ortamında performanslarını gözlemleyebilirsin.